package com.giacom.abc.isabela.model;

import java.io.InputStream;
import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
import javax.persistence.Version;

@Entity
public class Item implements Serializable
{

   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "id", updatable = false, nullable = false)
   private Long id = null;
   @Version
   @Column(name = "version")
   private int version = 0;

   @Column
   private String nome;

   @ManyToOne(fetch = FetchType.LAZY, optional = false)
   private Categoria categoria;

   @Transient
   private InputStream imagem;

   public Long getId()
   {
      return this.id;
   }

   public void setId(final Long id)
   {
      this.id = id;
   }

   public int getVersion()
   {
      return this.version;
   }

   public void setVersion(final int version)
   {
      this.version = version;
   }

   @Override
   public boolean equals(Object that)
   {
      if (this == that)
      {
         return true;
      }
      if (that == null)
      {
         return false;
      }
      if (getClass() != that.getClass())
      {
         return false;
      }
      if (id != null)
      {
         return id.equals(((Item) that).id);
      }
      return super.equals(that);
   }

   @Override
   public int hashCode()
   {
      if (id != null)
      {
         return id.hashCode();
      }
      return super.hashCode();
   }

   public String getNome()
   {
      return this.nome;
   }

   public void setNome(final String nome)
   {
      this.nome = nome;
   }

   public Categoria getCategoria()
   {
      return this.categoria;
   }

   public void setCategoria(final Categoria categoria)
   {
      this.categoria = categoria;
   }

   public InputStream getImagem()
   {
      return this.imagem;
   }

   public void setImagem(final InputStream imagem)
   {
      this.imagem = imagem;
   }

   @Override
   public String toString()
   {
//      String result = getClass().getSimpleName() + " ";
//      if (nome != null && !nome.trim().isEmpty())
//         result += "nome: " + nome;
//      return result;
	   return nome;
   }
}